/// 而应用级别的Error不需要进一步上传给调用者，只需要有一个Result类型 可以集中处理所有的底层Error即可
/// 。因此，此时不需要自定义MyError， 使用anyhow改写之后如下：
///
///anyhow为泛型(generic)的Result<T，E>实现了Context trait。
/// 而Context提供了context函数，将原来的Result<T，E>转成了Result<T，anyhow::Error>，
/// 最终在应用级别将错误类型统一到anyhow::Error上。
use anyhow::{Context, Result};
pub fn fetch_id() -> Result<u64> {
    let content = std::fs::read_to_string("/Users/apple/study/rust/firstCargoProject/test1.txt")
        .context("open /tmp/tmp_id failed.")?;
    let id = content.parse::<u64>().context("parse error.")?;
    Ok(id)
}
///被mod到其他主mod，这个也不显示为可执行文件了。
fn main() -> Result<()> {
    let id = fetch_id()?;
    println!("{:?}", id);
    Ok(())
}